/*
链接：https://ac.nowcoder.com/acm/contest/112576/G
来源：牛客网
小红拿到了一个长度为 2×n 的数组 {𝑎1,𝑎2,…,𝑎2×𝑛}{a1​,a2​,…,a2×n}，初始所有元素都是0，她可以进行任意次以下操作：∙ ∙
尝试使ai​加1。该操作有bi​%的概率成功。若成功，则ai​加1；若失败，如果ai大于0则会减 （等于0 则无变化）。
小红希望最终a 变成一个双排列。她希望最小化操作次数，请你求出小红最优策略下，最终操作次数的期望。答案对 
10e9+7取模。
【名词解释】
双排列：长度为2×n 的双排列为两个长度为n 的排列打乱顺序后得到的数组。
排列：长度为 n 的排列是由
1,2,…,n 这n个整数、按任意顺序组成的数组（每个整数均恰好出现一次）。例如，
{2,3,1,5,4} 是一个长度为5的排列，而{1,2,2}和
{1,3,4} 都不是排列，因为前者存在重复元素，后者包含了超出范围的数。
*/
#include<bits/stdc++.h>
#define ll long long
#define int ll
#define endl "\n"
#define pii pair<int,int>
#define mp(a,b) make_pair(a,b)
#define max(a,b) (a<b?b:a)
#define min(a,b) (a<b?a:b)
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define i128 __int128
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;

void init_inv(int size,int mod);
void init_fac(int size,int mod);
int fp(int a,int b,int mod);
int C(int m,int n,int mod);
int A(int m,int n,int mod);

vector<int> inv;
vector<int> factory;

void solve(){
    int n;
    cin>>n;
    vector<int> b(2*n+1);
    for(int i=1;i<=2*n;i++){
        cin>>b[i];
    }
    sort(b.begin()+1,b.end());
    vector<vector<int>> f(110,vector<int>(n+10)); //f[i][j]为在i%下从0到j的期望步数
    int inv100=fp(100,MOD-2,MOD);
    for(int i=1;i<=100;i++){
        int pi=i*inv100%MOD;
        for(int j=1;j<=n;j++){ //差分
            f[i][j]=((1+f[i][j-1])%MOD-pi*f[i][j-1]%MOD)%MOD; //当前f[i][j]为由i-1 -> i的期望步数
            f[i][j]=f[i][j]*fp(pi,MOD-2,MOD)%MOD;             //此时状态转移方程为f[i][j]=(1+f[i][j-1]-i/100)/(i/100)
        }
        for(int j=1;j<=n;j++){ //前缀 f[i][j]为0->1->2->...->j的期望步数之和
            f[i][j]=(f[i][j-1]+f[i][j]+MOD)%MOD;
        }
    }

    int res=0;
    for(int i=1;i<=2*n;i++){
        int target=(i+1)/2;
        res=(res+f[b[i]][target]+MOD)%MOD;
    }
    cout<<res<<endl;
}

signed main(){
    int t=1;
    while(t--){
        solve();
    }
}

int fp(int a,int b,int mod){
    if(b==0){
        return 1;
    }
    int ret=1;
    while(b){
        if(b&1){
            ret=ret*a%mod;
        }
        a=a*a%mod;
        b>>=1;
    }
    return ret;
}
void init_fac(int size,int mod){
    factory.resize(size+10);
    factory[0]=1;
    for(int i=1;i<=size;i++){
        factory[i]=factory[i-1]*i%mod;
    }
}
void init_inv(int size,int mod){
    inv.resize(size+10);
    inv[1]=1;
    for(int i=2;i<=size;i++){
        inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    }
}
int C(int m,int n,int mod){
    int ans=1;
    for(int i=1;i<=n;i++){
        ans=ans*((m-i+1)%mod)%mod*inv[i];
    }
    return ans;
}
int A(int m,int n,int mod){
    int ans=1;
    for(int i=1;i<=n;i++){
        ans=ans*(m-i+1)%mod;
    }
    return ans;
}
